package com.hmall.api.client.fallback;

import com.hmall.api.client.PayClient;
import com.hmall.api.dto.PayOrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;

/**
 * 支付服务Feign客户端的熔断降级工厂
 * 功能：当调用支付服务失败时，提供备选处理逻辑
 */
@Slf4j
public class PayClientFallback implements FallbackFactory<PayClient> {

    /**
     * 创建支付服务的降级代理对象
     * @param cause 触发降级的异常
     * @return 实现了PayClient接口的降级处理对象
     */
    @Override
    public PayClient create(Throwable cause) {
        return new PayClient() {
            /**
             * 根据业务订单号查询支付订单的降级方法
             * @param id 业务订单ID
             * @return null（查询失败时返回默认值）
             */
            @Override
            public PayOrderDTO queryPayOrderByBizOrderNo(Long id) {
                log.error("远程调用PayClient#queryPayOrderByBizOrderNo失败，订单ID：{}", id, cause);
                // 查询失败时返回null，由调用方处理空值情况
                // 适用场景：允许支付信息暂时缺失，页面展示默认状态
                return null;
            }
        };
    }
}